In-circuit emulation (ICE) has been used by software and hardware developers for a number of years as a development tool to emulate the operation of complex circuit building blocks and permit diagnosis and debugging of hardware and software. Such in-circuit emulation is most commonly used currently to analyze and debug the behavior of complex devices such as microcontrollers and microprocessors that have internal structures that are far too complex to readily model using computer simulation software alone.
FIG. 1 illustrates an exemplary conventional in-circuit emulation arrangement 100 used to model, analyze and debug the operation of a microcontroller device. In this arrangement, a host computer (e.g., a personal computer) 110 is connected to a debug logic block 120 which is further connected to a special version of the microcontroller device that has been developed specially for use in emulation. Operational instructions are loaded from the host computer 110 through the debug logic 120 to the special version of the microcontroller 130. The debug logic 120 monitors operation of the microcontroller 130 as the instructions are executed. Depending upon the application, this operation may be monitored while the special version of the microcontroller 130 is interconnected with the circuitry that is intended to interface a production version of the microcontroller in the finished product under development. Such interconnection may be via simulation within host computer 110 or as actual circuitry or some combination thereof. As the circuit is stepped through its operation, the debug logic gathers information about the state of various components of the microcontroller 130 during operation and feeds that information back to the host computer 110 for analysis.
During the course of the analysis, various trace information such as time stamps, register values, data memory content, etc. may be logged in the host computer 110 for analysis and debugging by the designer. Additionally, it is generally the case that various break points can be defined by the designer that cause the program to halt execution at various points in the operation to permit detailed analysis. Other debugging tools may also be provided to enable the user to debug the operation of the circuit.
In-circuit emulation systems such as 100 have a number of disadvantages and limitations. In earlier systems, the microcontroller 130 might have been simply the production version of the microcontroller itself with no special debugging features. In such systems, the information that can be gathered by the ICE system 100 is limited to that which is available at the pinouts of the microcontroller 130 (or which can be extracted from the microcontroller using clever programming or special coding supported by the processor).
Enhancements to such early systems provided the microcontroller or other processor with an array of built-in debugging tools that use standard pins on the part and built-in instructions that facilitated in-circuit emulation. In such enhanced processors, the emulation tools are integrated into the part and thus become a design constraint for developing and improving the part. Thus, support for the debugging instruction code and the like can increase the cost and complexity of the circuit.
Newer systems often use a so-called “bond-out” microcontroller. A bond-out version of the microcontroller is a version of the production microcontroller that has been designed with special wirebonding pads on the chip that are not normally connected in the production wirebonding. The bond-out version connects these pads to pins on the microcontroller package to permit access to otherwise inaccessible points of the circuit to facilitate debugging. This technique is in common use, but has the disadvantage of imposing significant limitations on the circuit layout to permit space and circuitry associated with the special wirebonding pads. Additionally, it is usually the case that substantial interface circuitry and other special circuitry to facilitate the debugging and bond-out has to be added to the circuit. This increases the complexity, size, power consumption and potentially reduces the yield of the production part. Moreover, development resources are required to lay out the bond-out circuitry and pads and do associated design of such bond-out circuitry. Additionally, instruction code must generally be provided and supported for such an implementation. Such resources may have to be applied with every updated version of the part and may significantly impact speed, cost or flexibility in development of improved versions of the part.
A third technique, one that is used in the Pentium™ and Pentium Pro™ series of microprocessors available from Intel Corporation, provides a special “probe mode” of operation of the processor. When the processor is placed in this probe mode, a number of internal signals are routed to a “debug port” for use by the in-circuit emulation system. This debug port is used to permit the in-circuit emulation system to communicate with the processors at all times and, when placed in probe mode, to read otherwise inaccessible probe points within the processor. Of course, providing such a probe mode requires significant design resources to design in all such probe and debug functions and associated instruction code support into the standard processor. This, of course, increases development cost, chip complexity and chip size. Moreover, such facilities become a part of the processor design which must be carried through and updated as required as enhancements to the original design are developed.